//
//  NSData+Tools.h
//  MiaoPai
//
//  Created by jiaxuzhou on 2017/6/10.
//  Copyright © 2017年 Jeakin. All rights reserved.
//
//


#import <Foundation/Foundation.h>

static const NSUInteger ChunkSize = 16384;


@interface NSData (Tools)


#pragma mark - ************************************ 加密相关 ****************************************

/**
-方法 MD5加密（小写）
 @return 加密结果
 */
- (NSString *)mp_MD5Lower16;

/**
 -方法 MD5加密（大写）
 @return 加密结果
 */
- (NSString *)mp_MD5Upper16;

/**
 +方法 MD5加密（小写）
 @param originalData 加密前的data
 @return 加密结果
 */
+ (NSString *)mp_MD5Lower16:(NSData *)originalData;

/**
 +方法 MD5加密（大写）
 @param originalData 加密前的data
 @return 加密结果
 */
+ (NSString *)mp_MD5Upper16:(NSData *)originalData;

/**
 -方法 AES128位+哈希加密

 @param aKey 加密秘要
 @return 加密后的字符串
 */
- (NSString *)mp_AES128HexEncryptPassword:(NSString *)aKey;
/**
 -方法 AES128位+哈希解密
 
 @param aKey 加密秘要
 @return 解密后的字符串
 */
- (NSString *)mp_AES128HexDecryptPassword:(NSString *)aKey;

/**
 +方法 AES128位+哈希加密

 @param aData 加密前的data
 @param aKey 加密秘要
 @return 加密后的字符串
 */
+ (NSString *)mp_AES128HexEncrypt:(NSData *)aData password:(NSString *)aKey;

/**
 +方法 AES128位+哈希解密
 
 @param aData 解密前的data
 @param aKey 加密秘要
 @return 解密后的字符串
 */
+ (NSString *)mp_AES128HexDecrypt:(NSData *)aData password:(NSString *)aKey;

/**
 -方法 哈希加密

 @return 加密后的值
 */
- (NSString *)mp_HEXEncrypt;

/**
 -方法 哈希解密

 @return 解密后的值
 */
- (NSData *)mp_HEXDecrypt;

/**
 +方法 哈希加密

 @param aData 加密之前的data
 @return 加密后的值
 */
+ (NSString *)mp_HEXEncrypt:(NSData *)aData;

/**
 +方法 哈希解密

 @param aData 解密之前的data
 @return 解密后的值
 */
+ (NSData *)mp_HEXDecrypt:(NSData *)aData;

/**
 -方法 base64加密

 @return 加密后的值
 */
- (NSString *)mp_Base64Encrypt;

/**
 -方法 base64解密

 @return 解密后的值
 */
- (NSData *)mp_Base64Decrypt;

/**
 +方法 base64加密

 @param aData 加密之前的值
 @return 加密之后的值
 */
+ (NSString *)mp_Base64Encrypt:(NSData *)aData;

/**
 +方法 base64解密

 @param aData 解密前的值
 @return 解密后的值
 */
+ (NSData *)mp_Base64Decrypt:(NSData *)aData;


#pragma mark - ************************************ gzip压缩 ****************************************

/**
 gzip 压缩

 @return 压缩后的数据
 */
- (NSData *)mp_gzippedData;

/**
 gzip解压

 @return gzip解压数据
 */
- (NSData *)mp_gunzippedData;

/**
 gzip压缩

 @param level gzip压缩数量级
 @return 返回gzip压缩数据
 */
- (NSData *)mp_gzippedDataWithCompressionLevel:(float)level;


@end
